/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sni.org.pe.session;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import sni.org.pe.model.OpcionSistema;
import sni.org.pe.model.Perfil;
import sni.org.pe.session.remote.OpcionSistemaSessionEJBRemote;

/**
 *
 * @author Ericson
 */
@Stateless
public class OpcionSistemaSessionEJB implements OpcionSistemaSessionEJBRemote {

    @PersistenceContext(unitName = "persistenciaPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public OpcionSistemaSessionEJB() {
    }

    public List<OpcionSistema> findAll() {
        return em.createNamedQuery("OpcionSistema.findAll").getResultList();
    }

    @Override
    public List<OpcionSistema> findMenu(Integer estadoMenu) {
        List<OpcionSistema> lstOpcionSistema = null;
        try {
            Query q = em.createQuery("select o from OpcionSistema o where o.ismenuitem=:ismenuitem");
            q.setParameter("ismenuitem", estadoMenu);
            lstOpcionSistema = (List<OpcionSistema>) q.getResultList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return lstOpcionSistema;
    }

    @Override
    public List<OpcionSistema> findSubMenus(Perfil notInPerfil) {
        List<OpcionSistema> los = new ArrayList<OpcionSistema>();
        try {
            StringBuffer sb = new StringBuffer();
            sb.append("select idopsist,");
            sb.append(" imagenopsist, ");
            sb.append(" nombreopsist,");
            sb.append(" urlopsist,");
            sb.append(" idpadreopsist,");
            sb.append(" tooltipopsist,");
            sb.append(" estadoopsist,");
            sb.append(" ismenuitem ");
            sb.append("from opcion_sistema ");
            sb.append("where ismenuitem=? and");
            sb.append(" idopsist not in (select idopsist from perfil_opcion_sistema where idperfil = ?)");
            Query q = em.createNativeQuery(sb.toString());
            q.setParameter(1, 0);
            q.setParameter(2, notInPerfil.getIdperfil());
            List<Object[]> lstRest = (List<Object[]>)q.getResultList();
            if(lstRest!=null && lstRest.size()>0){
                for(Object obj[] : lstRest){
                    OpcionSistema os = new OpcionSistema();
                    os.setIdopsist(new BigDecimal(obj[0].toString()));
                    os.setImagenopsist(obj[1].toString());
                    os.setNombreopsist(obj[2].toString());
                    os.setUrlopsist(obj[3].toString());
                    OpcionSistema op = new OpcionSistema();
                    op.setIdopsist(new BigDecimal(obj[4].toString()));
                    os.setIdpadreopsist(op);
                    os.setTooltipopsist(obj[5].toString());
                    os.setEstadoopsist(new BigInteger(obj[6].toString()));
                    os.setIsmenuitem(new BigInteger(obj[7].toString()));
                    los.add(os);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return los;
    }
    
    @Override
    public OpcionSistema getOpcionSistemaById(BigInteger idOpSist){
        OpcionSistema os = null;
        try{
            Query q = em.createQuery("select o from OpcionSistema o where o.idopsist=:idopsist");
            q.setParameter("idopsist", idOpSist);
            os = (OpcionSistema)q.getSingleResult();
        }catch(Exception e){
            e.printStackTrace();
        }
        return os;
    }

    
}
